package com.sam.designpatterns

import java.util.*

/**
 * 观察者：努力搬砖的程序员
 */
class Coder(var name: String) : Observer {
    override fun update(o: Observable, arg: Any) {
        println("hi $name，$arg")
    }
}

/**
 * 观察者：没有梦想的咸鱼
 */
class Fish: Observer {
    override fun update(o: Observable, arg: Any) {
        println("咸鱼划水中~~~~~~~~~~~~~~~~")
    }
}

/**
 * 被观察者：老板
 */
class Boss : Observable() {
    fun postMsg(msg: String?) {
        setChanged() //标记数据改变
        notifyObservers(msg) //通知
    }
}

fun main() {// 场景：老板通知程序员
    val boss = Boss()
    val fish = Fish()
    val coder1 = Coder("程序猿")
    val coder2 = Coder("程序媛")

    boss.addObserver(fish)
    boss.addObserver(coder1)
    boss.addObserver(coder2)

    boss.postMsg("客户明天要，今天全加班")
    boss.postMsg("有bug，谁的锅，赶紧 Fix!")
    boss.postMsg("公司困难，这个月工资延迟发")
}

